﻿using System;
using System.ComponentModel;
using System.Drawing.Design;
using ApplicationGenerator.CommonModule;
using ApplicationGenerator.Versions.BusinessLogic;
using ApplicationGenerator.Versions.Forms;

namespace ApplicationGenerator.Lists.Web
{
    /// <summary>
    /// Akcja pozwalająca na kontynuowanie procesu wybranego na liście
    /// </summary>
    [Serializable]
    public class ListActionContinueSelectedWorkflow : ListActionBase
    {
        #region Properties
        /// <summary>
        /// Proces, którego typu będzie kontynuowany wybrany elementy
        /// </summary>
        [Category("Rozszerzone dane")]
        [DisplayName("Uruchamiany proces")]
        [Description("Proces, który ma zostać uruchomiony po zaznaczeniu elementu na liście i wykonaniu akcji")]
        [TypeConverter(typeof(VersionConverter))]
        [Editor(typeof(VersionEditor), typeof(UITypeEditor))]
        [VersionType(VersionElement.Workflow)]
        public VersionInfo Workflow
        {
            get;
            set;
        }
        #endregion

        #region Overrides
        /// <summary>
        /// Wykonuje akcję
        /// </summary>
        public override void ExecuteAction()
        {
            if (ListControl.GetSelectedIds().Count != 1)
            {
                ListControl.AddErrorMessage("Należy zaznaczyć 1 element");
                return;
            }

            int workflowInstanceId = ListControl.GetSelectedIds()[0];

            ListControl.Page.Response.Redirect(
                QuerryStringConstants.GenerateLoadWorkflowUrl(
                Workflow.Version.ToString(),
                workflowInstanceId.ToString()));
        }

        /// <summary>
        /// Zwraca nazwę akcji
        /// </summary>
        /// <returns>Nazwa akcji</returns>
        public override string ToString()
        {
            return "Akcja Kontynuuj wybrany proces";
        }

        /// <summary>
        /// Waliduje encję
        /// </summary>
        /// <param name="errorList">Lista błędów</param>
        /// <returns>Czy encja jest poprawna ?</returns>
        public override bool IsValid(ErrorEntity errorList)
        {
            bool isValid = base.IsValid(errorList);
            if (Workflow == null || Workflow.Version == Guid.Empty)
            {
                errorList.ErrorStrings.Add("Należ podać workflow do wyświetlenia");
                isValid = false;
            }

            return isValid;
        }
        #endregion
    }
}
